// package com.example.pan.http
//
// import kotlinx.coroutines.ExperimentalCoroutinesApi
// import kotlinx.coroutines.flow.Flow
// import kotlinx.coroutines.flow.flow
// import kotlinx.coroutines.suspendCancellableCoroutine
// import retrofit2.Call
// import retrofit2.CallAdapter
// import retrofit2.Callback
// import retrofit2.Response
// import retrofit2.Retrofit
// import java.lang.reflect.ParameterizedType
// import java.lang.reflect.Type
// import kotlin.coroutines.resumeWithException
//
// class FlowCallAdapterFactory : CallAdapter.Factory() {
//     @ExperimentalCoroutinesApi
//     override fun get(
//         returnType: Type,
//         annotations: Array<out Annotation>,
//         retrofit: Retrofit
//     ): CallAdapter<*, *>? {
//         if (getRawType(returnType) != Flow::class.java) {
//             return null
//         }
//         require(returnType is ParameterizedType) {
//             "Call return type must be parameterized as Call<Foo> or Call<? extends Foo>"
//         }
//         val responseType = getParameterUpperBound(0, returnType)
//         return object : CallAdapter<Any, Flow<Any>> {
//             override fun responseType(): Type = responseType
//
//             override fun adapt(call: Call<Any>): Flow<Any> = flow {
//                 emit(
//                     suspendCancellableCoroutine { continuation ->
//                         call.enqueue(object : Callback<Any> {
//                             override fun onFailure(call: Call<Any>, t: Throwable) {
//                                 continuation.resumeWithException(t)
//                             }
//
//                             override fun onResponse(call: Call<Any>, response: Response<Any>) {
//                                 continuation.resume(response.body()!!) {
//                                     continuation.resumeWithException(it)
//                                 }
//                             }
//                         })
//                         continuation.invokeOnCancellation { call.cancel() }
//                     }
//                 )
//             }
//         }
//     }
//
//     companion object {
//         @JvmStatic
//         fun create() = FlowCallAdapterFactory()
//     }
// }